A peer to peer network is a network of two or more computers that employ a same program or type of program to communicate and share data. Each computer or peer (e.g., node) is typically considered equal in terms of responsibilities and acts as a server to others in a network. A peer to peer network is unlike a client/server architecture where a dedicated file server is required. Peer to peer networks have become increasingly popular—users employ peer to peer networks for sharing of data, such as audio files, multimedia files, video files, programs, digital images and the like.
One common implementation of a peer to peer network utilizes a central server to maintain a list of nodes and data stored on the nodes, which is an implementation utilized by file sharing software such as Napster. FIG. 1 is a block diagram illustrating a system 100 of such type of peer to peer network implementation. The system 100 includes a central server 102 and a plurality of nodes 104. Respective nodes of the plurality of nodes 104 can join and un-join the system 100 at will. Upon joining, the nodes 104 provide a list of files they are capable of serving to the central server 102. The central server 102 adds the list of files to a list of the available files of all nodes. Upon un-joining by the nodes 104, the list of files are removed from the list of available files for all the nodes. A requesting node 106 (e.g., user) of the nodes 104 requests a file by sending a request for the file to the central server 102. The central server maintains the list of available files of all nodes in the system 100 and responds to the request with a list of nodes capable of answering or satisfying the request. The requesting node 106 then obtains the file via a direct connection to one of the nodes able to satisfy the request (hereinafter referred to as a transferring node 108). The central server 102 is not involved in the transfer of the file to the requesting node 106 (hence the name peer to peer).
Although the conventional system 100 of FIG. 1 performs adequately, there are a number of potential problems associated with such system. One problem is that the system 100 has a single point of failure—even though the central server 102 is not involved in serving requests (e.g., transferring files), the central server 102 is involved in matching every request. Thus, if the central server 102 goes off-line, the entire network can cease to function. A second problem is lack of scalability; the central server 102 is required to track files available at all nodes 104; and since nodes can appear and disappear, the central server 102 must periodically contact each of the respective nodes 104 (e.g., by pinging the nodes). Such repeated updating can be a significant burden on the central server 102 and the burden increases coincidentally with an increase in number of nodes in the system 100.
Another problem is a lack of anonymity. Since nodes serve and receive files from each other, sending or transferring nodes are required to identify themselves to each other (e.g., by exposing their IP addresses) along with data the nodes are willing to serve. Furthermore, lack of fairness can be yet another obstacle associated with such conventional system. It is possible for one of the nodes 104 to request and receive many files and refuse to serve any, thereby partaking in the benefits of the network without shouldering any of the burden. Additionally, since the central server 102 does not track transferring of files, nodes can deliberately misrepresent themselves.